import { defineConfig } from "vite"
import vue from "@vitejs/plugin-vue"
import Icons from "unplugin-icons/vite"
import IconResolver from "unplugin-icons/resolver"
import Components from "unplugin-vue-components/vite"
import path from "path"

// @ts-expect-error process is a nodejs global
const host = process.env.TAURI_DEV_HOST

export default defineConfig(async () => ({
  plugins: [
    vue(),
    Components({
      dts: "./src/components.d.ts",
      resolvers: [
        IconResolver({
          prefix: "icon",
        }),
        (compName: string) => {
          if (compName.startsWith("Hopp"))
            return { name: compName, from: "@hoppscotch/ui" }
          return undefined
        },
      ],
      types: [
        {
          from: "vue-tippy",
          names: ["Tippy"],
        },
      ],
      include: [/\.vue$/, /\.vue\?vue/],
      dirs: ["src/components"],
    }),
    Icons({
      compiler: "vue3",
    }),
  ],

  resolve: {
    alias: {
      "~": path.resolve(__dirname, "src"),
      "~/": path.resolve(__dirname, "src/"),
      "@hoppscotch/common": "@hoppscotch/common/src",
    },
    dedupe: ["vue"],
  },

  optimizeDeps: {
    include: ["@hoppscotch/kernel"],
  },

  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          kernel: ["@hoppscotch/kernel"],
          ui: ["@hoppscotch/ui"],
        },
      },
    },
  },

  // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
  clearScreen: false,
  server: {
    port: 1420,
    strictPort: true,
    host: "127.0.0.1",
    hmr: host
      ? {
          protocol: "ws",
          host,
          port: 1421,
        }
      : undefined,
    watch: {
      ignored: ["**/src-tauri/**"],
    },
  },
}))
